import java.util.Arrays;

/*
题目描述：打印从 1 到 最大的 n 位数
方法：
n 很大的时候，不能使用常规的int， 需要借助字符串
1. 用字符串模拟整数加法过程
2. n 位数的每一位的取值范围都为 0 ~ 9 ，可以看成是全排列，只需要在打印输出的时候忽略前缀 0 即可

下面实现方法 2
 */
public class E17 {
    public static void main(String[] args){
        int n = 3;
        Print1ToMaxOfDigits(n);
    }

    public static void Print1ToMaxOfDigits(int n){
        if(n <= 0){
            return;
        }
        char[] number = new char[n + 1];
        number[n] = '\0';

        for(int i = 0; i < 10; i++){
            number[0] = (char)(i + '0');
            Print1ToMaxOfDigitsRecursively(number, n, 0);
        }
    }

    public static void Print1ToMaxOfDigitsRecursively(char[] number, int n, int index){
        if(index == n - 1){
            PrintNumber(number);
            return;
        }
        for(int i = 0; i < 10; i++){
            number[index + 1] = (char)(i + '0');
            Print1ToMaxOfDigitsRecursively(number, n, index + 1);
        }
    }

    public static void PrintNumber(char[] number){
        boolean isBeginning0 = true;
        int i;
        for(i = 0; i < number.length; i++){
            if(isBeginning0 && number[i] != '0'){
                isBeginning0 = false;
            }
            if(!isBeginning0){
                System.out.print(number[i]);
            }
        }
            System.out.println();
    }
}
